perm filename INDAT3.SAI[X,ALS] blob
sn#078543 filedate 1973-12-22 generic text, type T, neo UTF8
00010 ENTRY PREPARE;
00020 BEGIN
00030 DEFINE ⊂="COMMENT",CR="'15",LF="'12",CRLF="CR&LF",TB="'11";
00040 DEFINE ⊃="⊂"; ⊂ Used to delete output statements for PLOT;
00050 EXTERNAL REAL ARRAY A,C,D[0:512];
00060 ⊃ INTERNAL INTEGER ARRAY NEW[0:512];
00070 INTERNAL INTEGER ARRAY INNAME,INDATA[0:32];
00080 EXTERNAL INTEGER ARRAY FVAL[0:8];
00090 INTEGER I,J,K,P,POINTP,NX;
00100 ⊃ EXTERNAL INTEGER CHAN5;
00110 INTERNAL INTEGER INFLAG;
00120 INTEGER F1_LOW,F1_HI,F2_LOW,F2_HI,F3_LOW,F3_HI,F4_LOW,F4_HI,F5_LOW;
00130 INTEGER F5_HI,NP_LOW,NP_HI,NZ_LOW,NZ_HI,FP1_LO,FP1_H,FP2_LO,FP2_H;
00140 INTERNAL INTEGER F1,F2,F3,F4,F5,NP,NZ,FP1,FP2,A1,A2,A3,A4,A5;
00150 INTEGER M1,M2,M3,M4,M5;
00160
00170
00180
00190
00200 INTERNAL PROCEDURE DEFINES;
00210 BEGIN
00220 F1_LOW← 180 * 256%10000; F1_HI← 850 * 256%10000;
00230 F2_LOW← 700 * 256%10000; F2_HI← 2500 * 256%10000;
00240 F3_LOW← 1700 * 256%10000; F3_HI← 3500 * 256%10000;
00250 F4_LOW← 2500 * 256%10000; F4_HI← 4500 * 256%10000;
00260 F5_LOW← 3600 * 256%10000; F5_HI← 5400 * 256%10000;
00270
00280 M1← 320 * 256%10000;
00290 M2← 1350 * 256%10000;
00300 M3← 2800 * 256%10000;
00310 M4← 3400 * 256%10000;
00320 M5← 4500 * 256%10000;
00330
00340 FP1_LO← 1800 * 256%10000; FP1_H← 3200 * 256%10000;
00350 FP2_LO← 3200 * 256%10000; FP2_H← 5000 * 256%10000;
00360
00370
00380 NP_LOW← 800 * 256%10000; NP_HI← 1500 * 256%10000;
00390 NZ_LOW←NP-500* 256%10000; NZ_HI←NP+500* 256%10000;
00400 END;
00410
00420 INTERNAL PROCEDURE DATOUT;
00430 BEGIN
00440
00450 ⊃ ARRYOUT(CHAN5,NEW[0],512);
00460 ⊃ POINTP←POINT(9,NEW[1],-1);
00470 NX←0;
00480 END;
00490
00500
00510
00010 INTEGER PROCEDURE PEAK (INTEGER LOW,HIGH);
00020 BEGIN
00030 INTEGER I,J,K; REAL MAX,MIN;
00040
00050 MAX←-10000; K←LOW;
00060
00070 FOR I←LOW STEP 1 UNTIL HIGH DO
00080 IF C[I]>MAX THEN BEGIN MAX←C[I]; J←I; END;
00090
00100 IF J=LOW THEN BEGIN
00110 MAX←-10000; MIN←10000;
00120 FOR I←LOW STEP 1 UNTIL HIGH DO BEGIN
00130 IF C[I]>MIN THEN DONE;
00140 IF C[I]<MIN THEN BEGIN MIN←C[I]; K←I; END;
00150 END;
00160
00170 FOR I←K STEP 1 UNTIL HIGH DO
00180 IF C[I]>MAX THEN BEGIN MAX←C[I]; J←I; END;
00190 END;
00200
00210 IF J=HIGH THEN BEGIN
00220 MAX←-10000; MIN←10000;
00230 FOR I←HIGH STEP -1 UNTIL K DO BEGIN
00240 IF C[I]>MIN THEN DONE;
00250 IF C[I]<MIN THEN MIN←C[I];
00260 END;
00270
00280 FOR I←I STEP -1 UNTIL K DO
00290 IF C[I]>MAX THEN BEGIN MAX←C[I]; J←I; END;
00300 END;
00310
00320 RETURN(J);
00330 END;
00340
00350 INTEGER PROCEDURE BAND(INTEGER F);
00360 BEGIN
00370 INTEGER I,J;
00380
00390 FOR I←F STEP 1 UNTIL 255 DO IF (C[I]+6)≤C[F] THEN DONE;
00400 ⊂ OUTSTR("F="&CVS(F)&TB&"I="&CVS(I)&TB);
00410 FOR J←F STEP -1 UNTIL 0 DO IF (C[J]+6)≤C[F] THEN DONE;
00420 ⊂ OUTSTR("J="&CVS(J)&CRLF);
00430 IF (F-J)<(I-F) THEN RETURN(F-J) ELSE RETURN(I-F);
00440 END;
00450
00460 INTEGER PROCEDURE REMOVE(INTEGER F,LIMIT);
00470 BEGIN
00480 INTEGER I,J,K;
00490 REAL X,Y,MAX,MIN;
00500
00510 FOR I←F STEP 1 UNTIL LIMIT DO IF C[I]≤C[F]-6 THEN BEGIN J←I; DONE; END;
00520 FOR I←F STEP -1 UNTIL 0 DO IF C[I]≤C[F]-6 THEN BEGIN K←I; DONE; END;
00530 IF (F-K)<(J-F) THEN J←F-K ELSE J←J-F;
00540 X←6.0; X←X/(J*J);
00550 MAX←-10000;
00560
00570 FOR I←F+J STEP 1 UNTIL LIMIT DO
00580 IF (Y←C[I]-C[F]+X*(I-F)*(I-F))>MAX THEN BEGIN MAX←Y; J←I; END;
00590
00600 RETURN(J);
00610 END;
00620
00010 PROCEDURE FORMANT;
00020 BEGIN
00030
00040 REAL MAX1,MAX2,SUM1,SUM2;
00050
00060 IF INFLAG=0 THEN BEGIN
00070 ⊃ POINTP←POINT(9,NEW[1],-1); NX←0;
00080
00090 INNAME[P]←CVASC("F1"); P←P+1;
00100 INNAME[P]←CVASC("F2"); P←P+1;
00110 INNAME[P]←CVASC("F3"); P←P+1;
00120 INNAME[P]←CVASC("F4"); P←P+1;
00130 INNAME[P]←CVASC("F5"); P←P+1;
00140
00150 INNAME[P]←CVASC("A1"); P←P+1;
00160 INNAME[P]←CVASC("A2"); P←P+1;
00170 INNAME[P]←CVASC("A3"); P←P+1;
00180 INNAME[P]←CVASC("A4"); P←P+1;
00190 INNAME[P]←CVASC("A5"); P←P+1;
00200
00210 INNAME[P]←CVASC("B1"); P←P+1;
00220 INNAME[P]←CVASC("B2"); P←P+1;
00230 INNAME[P]←CVASC("B3"); P←P+1;
00240 INNAME[P]←CVASC("B4"); P←P+1;
00250 INNAME[P]←CVASC("B5"); P←P+1;
00260
00270 END ELSE BEGIN
00280
00290 F1←PEAK(F1_LOW,F1_HI);
00300 F2←PEAK(F2_LOW,F2_HI);
00310 ⊂ OUTSTR(CVS(F2*10000%256)&" ");
00320 F3←PEAK(F3_LOW,F3_HI);
00330 F4←PEAK(F4_LOW,F4_HI);
00340 F5←PEAK(F5_LOW,F5_HI);
00350
00360 WHILE TRUE DO BEGIN
00370 IF (F1≠F2)∧(F2≠F3) THEN DONE;
00380
00390 IF F1=F2 THEN BEGIN
00400 F2←PEAK(F1,F2_HI);
00410 ⊂ OUTSTR("(2)"&CVS(F2*10000%256));
00420 IF F2=F3 THEN BEGIN
00430 F3←PEAK(F2,F3_HI);
00440 ⊂ IF ((C[F3]+18)<C[F2])THEN BEGIN F3←F2; ⊂ F2←REMOVE(F1,F3); ⊂ END;
00450 END;
00460 DONE; END;
00470
00480 IF F2=F3 THEN BEGIN
00490 IF ABS(F2-M2)<ABS(F2-M3) THEN BEGIN
00500 F3←PEAK(F2,F3_HI);
00510 IF C[F3]+18<C[F2] THEN BEGIN
00520 F3←F2; F2←PEAK(F2_LOW,F3);
00530 IF F2=F1 THEN F2←PEAK(F1,F3); END;
00540 END ELSE BEGIN
00550 F2←PEAK(F2_LOW,F3);
00560 IF (C[F2]+12<C[F1])∨(F2=F1) THEN BEGIN
00570 F2←REMOVE(F1,F3); END;
00580 END;
00600
00610 ⊂ OUTSTR("(3)"&CVS(F2*10000%256));
00620 IF F2=F1 THEN BEGIN
00630 F2←PEAK(F1,F3);
00640 ⊂ IF ((C[F2]+12)<C[F1])∨((C[F2]+6)<C[F3]) THEN REMOVE(F1,F3);
00650 END;
00660 DONE; END;
00670
00680 END;
00690
00700 IF F3=F4 THEN F4←PEAK(F3,F4_HI);
00710 IF F5=F5 THEN F5←PEAK(F4,F5_HI);
00720
00730
00740 INDATA[P]←F1*10000%256; P←P+1;
00750 INDATA[P]←F2*10000%256; P←P+1;
00760 INDATA[P]←F3*10000%256; P←P+1;
00770 INDATA[P]←F4*10000%256; P←P+1;
00780 INDATA[P]←F5*10000%256; P←P+1;
00790 INDATA[P]←C[F1]; P←P+1;
00800 INDATA[P]←C[F2]; P←P+1;
00810 INDATA[P]←C[F3]; P←P+1;
00820 INDATA[P]←C[F4]; P←P+1;
00830 INDATA[P]←C[F5]; P←P+1;
00840
00850 INDATA[P]←BAND(F1)*10000%256; P←P+1;
00860 INDATA[P]←BAND(F2)*10000%256; P←P+1;
00870 INDATA[P]←BAND(F3)*10000%256; P←P+1;
00880 INDATA[P]←BAND(F4)*10000%256; P←P+1;
00890 INDATA[P]←BAND(F5)*10000%256; P←P+1;
00900 END;
00910 END;
00920
00010 INTERNAL PROCEDURE PREPARE;
00020 BEGIN
00030
00040 P←0;
00050
00060 FORMANT;
00070
00080
00090 ⊃ IF INFLAG≠0 THEN BEGIN
00100 ⊃ NEW[NX]←FVAL[4];
00110 ⊃ FOR I←0 STEP 1 UNTIL 27 DO IDPB(INDATA[I],POINTP);
00120 ⊃ FOR I←1 STEP 1 UNTIL 4 DO IBP(POINTP);
00130 ⊃ NX←NX+8;
00140 ⊃ IF NX≥512 THEN DATOUT;
00150 ⊃ END;
00160
00170 END;
00180
00190 END;
00200